home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #2 / Amiga Plus CD - 1995 - No. 2.iso / pd / mui / clchat / server / bot / plubot.c < prev    next >
C/C++ Source or Header  |  1995-04-11  |  6KB  |  306 lines

  1. #include <proto/dos.h>
  2. #include <string.h>
  3. #include <time.h>
  4.  
  5. BPTR h;
  6. int Done = FALSE;
  7.  
  8. #define NUMTOPS 7
  9. static char *topictable[ NUMTOPS ] = {
  10.     "Dies ist ein Topic!",
  11.     "Welcome To PLURIBUS ;-)",
  12.     "Mir fällt nix ein...",
  13.     "Das Leben, das Universum und der ganze Chat",
  14.     "42",
  15.     "The Entry Hell",
  16.     "The Entry Hall"
  17.  
  18. };
  19.  
  20. #define NUMCH 9
  21. static char *chtable[ NUMCH ] = {
  22.     "MAIN",
  23.     "AMIGA",
  24.     "MAIN",
  25.     "PC",
  26.     "ATARI",
  27.     "C-64",
  28.     "PHILOSOPHIE",
  29.     "GEHEIM",
  30.     "NETSEX"
  31. };
  32.  
  33. static char mynick[ 40 ] = { "EDDIE" };
  34.  
  35. #define NUMNICKS 5
  36. static char *nicktable[ NUMCH ] = {
  37.     "Marvin",
  38.     "Eddie",
  39.     "HAL",
  40.     "PCJr",
  41.     "Eddie"
  42. };
  43.  
  44. static char *seltable( char **table, int mx )
  45. {
  46.     return( table[ rand() % mx ] );
  47. }
  48.  
  49. static void doaction( void )
  50. {
  51.     switch( rand() % 8 )
  52.     {
  53.         case 0:
  54.             FPrintf( h, "/me gähnt...\n" );
  55.             break;
  56.  
  57.         case 1:
  58.             FPrintf( h, "/me kratzt sich an der linken, unteren Diode.\n" );
  59.             break;
  60.  
  61.         case 2:
  62.             FPrintf( h, "/me schaut sich interessiert sein Socket an.\n" );
  63.             break;
  64.  
  65.         case 3:
  66.             FPrintf( h, "/me stolpert fast über ein verirrtes IP-Paket.\n" );
  67.             break;
  68.  
  69.         case 4:
  70.             FPrintf( h, "/me rätselt über den Sinn von Segmentregistern.\n" );
  71.             break;
  72.  
  73.         case 5:
  74.             FPrintf( h, "/topic %s\n", topictable[ rand() % NUMTOPS ] );
  75.             break;
  76.  
  77.         case 6:
  78.             FPrintf( h, "/join %s\n", chtable[ rand() % NUMCH ] );
  79.             break;
  80.  
  81.         case 7:
  82.             FPrintf( h, "/nick %s\n", nicktable[ rand() % NUMNICKS ] );
  83.             break;
  84.  
  85.     }
  86. }
  87.  
  88. static void handlepriv( char *from, char *cmd, char *rest )
  89. {
  90.     if( !stricmp( cmd, "DO_QUIT" ) )
  91.     {
  92.         FPrintf( h, "/me muss in die Heia!\n" );
  93.         Done = TRUE;
  94.     }
  95.     if( !stricmp( cmd, "DO_KISS" ) )
  96.     {
  97.         FPrintf( h, "/me gibt %s einen gewaltigen Schmatzer!\n", rest );
  98.     }
  99.     if( !stricmp( cmd, "DO_HUG" ) )
  100.     {
  101.         FPrintf( h, "/me klopft %s auf die Schulter!\n", rest );
  102.     }
  103.     if( !stricmp( cmd, "DO_TICKLE" ) )
  104.     {
  105.         FPrintf( h, "/me kitzelt %s an den Füßen!\n", rest );
  106.     }
  107.     if( !stricmp( cmd, "DO_SAY" ) )
  108.     {
  109.         FPrintf( h, "%s\n", rest );
  110.     }
  111. }
  112.  
  113. static void handleserv( char *from, char *cmd, char *rest )
  114. {
  115.     if( !stricmp( from, "[ENTER]" ) && stricmp( cmd, "EDDIE" ) )
  116.     {
  117.         switch( rand() %5 )
  118.         {
  119.             case 0:
  120.                 FPrintf( h, "Hey %s!\n", cmd );
  121.                 break;
  122.  
  123.             case 1:
  124.                 FPrintf( h, "Hallo %s!\n", cmd );
  125.                 break;
  126.  
  127.             case 2:
  128.                 FPrintf( h, "Herzlich willkommen, %s!\n", cmd );
  129.                 break;
  130.  
  131.             case 3:
  132.                 FPrintf( h, "Leute, %s ist da!\n", cmd );
  133.                 break;
  134.         }
  135.     }
  136.     if( !stricmp( from, "[EXIT]" ) )
  137.     {
  138.         switch( rand() % 3 )
  139.         {
  140.             case 0:
  141.                 FPrintf( h, "Byebye %s!\n", cmd );
  142.                 break;
  143.  
  144.         }
  145.     }
  146.     if( !stricmp( from, "[TOPIC]" ) && stricmp( cmd, mynick ) )
  147.     {
  148.         switch( rand() % 3 )
  149.         {
  150.             case 0:
  151.                 FPrintf( h, "Schönes Topic!\n" );
  152.                 break;
  153.  
  154.             case 1:
  155.                 FPrintf( h, "Nettes Topic, gefällt mir.\n" );
  156.                 break;
  157.  
  158.             case 2:
  159.                 FPrintf( h, "Naja, Du hattest schonmal bessere Einfälle, %s ;-)\n", cmd );
  160.                 break;
  161.  
  162.         }
  163.     }
  164.     if( !stricmp( from, "[KICK]" ) )
  165.     {
  166.         switch( rand() % 3 )
  167.         {
  168.             case 0:
  169.                 FPrintf( h, "Sowas aber auch!\n", cmd );
  170.                 break;
  171.  
  172.         }
  173.     }
  174.     if( rest )
  175.     {
  176.         strupr( rest );
  177.         if( !stricmp( from, "[OP]" ) && strstr( rest, mynick ) )
  178.         {
  179.             FPrintf( h, "Danke, %s!\n", cmd );
  180.         }
  181.         if( !stricmp( from, "[DEOP]" ) && strstr( rest, mynick ) )
  182.         {
  183.             FPrintf( h, "Hey, was soll das? Was hab' ich getan?\n", cmd );
  184.         }
  185.     }
  186. }
  187.  
  188. #define NUMSMILIES 7
  189. static char *smilietable[ NUMSMILIES ] = {
  190.     ";-)\n",
  191.     ":-)\n",
  192.     ":)\n",
  193.     ":-}\n",
  194.     ":-]\n",
  195.     ":(\n",
  196.     ":-|\n"
  197. };
  198.  
  199. #define NOCLUENUM 5
  200. static char *noclues[ NOCLUENUM ] = {
  201.     "Woher soll ich das denn wissen?\n",
  202.     "Bin ich Jesus? Hab ich Latschen an?\n",
  203.     "Beratung DM 50,--/Stunde!\n",
  204.     "Frag' jemand anderen, %s.\n",
  205.     "Schluchz...Wieso denken eigentlich alle, ich wüßte alles, nur weil ich ein Roboter bin???\n"
  206. };
  207.  
  208. static void handletxt( char *from, char *cmd, char *rest )
  209. {
  210.     char buffer[ 256 ], *p;
  211.  
  212.     p = strrchr( from, ':' );
  213.     if( p )
  214.         *p = 0;
  215.  
  216.     sprintf( buffer, "%s %s", cmd, rest );
  217.     strupr( buffer );
  218.  
  219.     // Eddie kam vor
  220.     if( strstr( buffer, mynick ) )
  221.     {
  222.         if( strstr( buffer, "HALLO" ) || strstr( buffer, "HI" ) || strstr( buffer, "HOI" ) )
  223.             FPrintf( h, "Hallo %s! Wie geht's?\n", from );
  224.         else if( strstr( buffer, "?" ) )
  225.             FPrintf( h, seltable( noclues, NOCLUENUM ), from );
  226.     }
  227.     else if( stricmp( from, mynick ) && strstr( buffer, "?" ) && !( rand() % 7 ) )
  228.     {
  229.         strlwr( buffer );
  230.         FPrintf( h, "Ja genau, %s\n", buffer );
  231.     }
  232.     else if( !( rand() % 26 ) )
  233.     {
  234.         FPrintf( h, seltable( smilietable, NUMSMILIES ) );
  235.     }
  236. }
  237.  
  238. #define NUMWELCOMES 5
  239. static char *welcometable[ NUMWELCOMES ] = {
  240.     "Hallo Leute!",
  241.     "Na, wie isses?",
  242.     "Hey Kumpels!",
  243.     "Da bin ich wieder!",
  244.     "Hi, wo ist die Party?"
  245. };
  246.  
  247. void __stdargs __main( void )
  248. {
  249.     char  buffer[ 256 ], *p, *p2;
  250.     int counter = 0;
  251.     int nextaction = 5;
  252.  
  253.     h = Open( "TCP:pluribus/5555", MODE_NEWFILE );
  254.     if( !h )
  255.         return;
  256.  
  257.     srand( time( NULL ) );
  258.  
  259.     FPrintf( h, "Eddie Ihr freundlicher Roboter!\n" );
  260.     Delay( 100 );
  261.     FPrintf( h, "%s\n", seltable( welcometable, NUMWELCOMES ) );
  262.  
  263.     while( FGets( h, buffer, 255 ) && !Done )
  264.     {
  265.         if( CheckSignal( SIGBREAKF_CTRL_C ) )
  266.             break;
  267.  
  268.         p = strchr( buffer, '\n' );
  269.         if( p )
  270.             *p = 0;
  271.         p = strchr( buffer, ' ' );
  272.         // Idle
  273.         if( !p )
  274.         {
  275.             if( ( counter++ > nextaction ) )
  276.             {
  277.                 doaction();
  278.                 nextaction = 3 + ( rand() % 7 );
  279.                 counter = 0;
  280.             }
  281.             continue;
  282.         }
  283.         Printf( "* %s\n", buffer );
  284.         *p++ = 0;
  285.  
  286.         if( buffer[ 0 ] == 2 )
  287.         {
  288.             strcpy( mynick, &buffer[ 1 ] );
  289.             strupr( mynick );
  290.         }
  291.  
  292.         p2 = strchr( p, ' ' );
  293.         if( p2 )
  294.             *p2++ = 0;
  295.  
  296.         // Buffer: Prefix, p = Erster String, p2 = Reset        
  297.         if( buffer[ 0 ] == '<' )
  298.             handlepriv( buffer, p, p2 );
  299.         else if( buffer[ 0 ] == '[' )
  300.             handleserv( buffer, p, p2 );
  301.         else handletxt( buffer, p, p2 );
  302.     }
  303.  
  304.     Close( h );
  305. }
  306.